//package com.ruoyi.web.websocket;
//
//import com.alibaba.fastjson2.JSONObject;
//import com.ruoyi.conversation.domain.Conversation;
//import com.ruoyi.conversation.mapper.ConversationMapper;
//import com.ruoyi.order.domain.Order;
//import com.ruoyi.order.mapper.OrderMapper;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.Date;
//import java.util.Map;
//import java.util.concurrent.*;
//
//@Api(tags = "聊天会话 REST API")
//@RestController
//@RequestMapping("/api/chat")
//public class WebSorcketServerApi {
//
//    @Autowired
//    private ConversationMapper conversationMapper;
//
//    @Autowired
//    private OrderMapper orderMapper;
//
//    private static final Logger LOGGER = LoggerFactory.getLogger(WebSorcketServerApi.class);
//
//    private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
//
//    private static final Map<String, ScheduledFuture<?>> pendingCloseTasks = new ConcurrentHashMap<>();
//
//    /**
//     * 发送聊天消息
//     */
//    @ApiOperation("发送聊天消息")
//    @PostMapping("/send")
//    public String sendMessage(
//            @ApiParam("聊天消息") @RequestBody Conversation message) {
//        LOGGER.info("收到聊天消息: {}", message);
//
//        if (message.getOrderId() == null || message.getOrderId().trim().isEmpty()) {
//            return "缺少 orderId，无法处理";
//        }
//        message.setCreateTime(new Date());
//
//        try {
//            conversationMapper.insertConversation(message);
//            LOGGER.info("消息已入库: {}", message);
//        } catch (Exception e) {
//            LOGGER.error("消息入库失败: {}", message, e);
//            return "消息入库失败";
//        }
//
//        return "消息发送成功";
//    }
//
//    /**
//     * 专家/用户发起结束会话
//     */
//    @ApiOperation("发起结束会话请求")
//    @PostMapping("/closeRequest")
//    public String closeRequest(
//            @ApiParam("会话请求") @RequestBody Conversation message) {
//        String orderId = message.getOrderId();
//        String fromRole = message.getFromRole();
//        LOGGER.info("发起结束请求: orderId={}, fromRole={}", orderId, fromRole);
//
//        if ("user".equals(fromRole)) {
//            closeOrder(orderId, message.getFromUser(), "用户已结束会话");
//            return "用户已结束会话";
//        } else if ("expert".equals(fromRole)) {
//            // 模拟等待用户确认，12小时后自动结束
//            ScheduledFuture<?> task = scheduler.schedule(() -> {
//                closeOrder(orderId, message.getFromUser(), "用户未响应，系统自动结束会话");
//            }, 12, TimeUnit.HOURS);
//            pendingCloseTasks.put(orderId, task);
//            return "专家发起结束请求，等待用户确认";
//        }
//
//        return "未知角色，无法处理";
//    }
//
//    /**
//     * 用户确认结束会话
//     */
//    @ApiOperation("用户确认结束会话")
//    @PostMapping("/closeConfirm")
//    public String closeConfirm(
//            @ApiParam("确认信息") @RequestBody Conversation message) {
//        String orderId = message.getOrderId();
//        LOGGER.info("用户确认结束会话: orderId={}", orderId);
//
//        ScheduledFuture<?> task = pendingCloseTasks.remove(orderId);
//        if (task != null) {
//            task.cancel(false);
//        }
//        closeOrder(orderId, message.getFromUser(), "用户已同意结束会话");
//        return "会话已结束";
//    }
//
//    /**
//     * 结束会话逻辑
//     */
//    private void closeOrder(String orderId, String fromUser, String reason) {
//        LOGGER.info("结束订单 {} - {}", orderId, reason);
//
//        Conversation endMsg = new Conversation();
//        endMsg.setActionType("closeNotice");
//        endMsg.setContent(reason);
//        endMsg.setOrderId(orderId);
//        endMsg.setFromUser(fromUser);
//        endMsg.setCreateTime(new Date());
//
//        try {
//            conversationMapper.insertConversation(endMsg);
//            LOGGER.info("结束通知已入库: {}", endMsg);
//        } catch (Exception e) {
//            LOGGER.error("结束通知入库失败: {}", endMsg, e);
//        }
//
//        Order order = orderMapper.selectOrderByOrderId(orderId);
//        if (order != null) {
//            order.setIsSession(1);
//            order.setOrderStatus("3");
//            orderMapper.updateOrder(order);
//            LOGGER.info("订单状态已更新: {}", order);
//        }
//    }
//}
